package com.example.no1admin.mapper;

import com.example.no1admin.pojo.dto.picture.PictureEditDTO;
import com.example.no1admin.pojo.entity.Picture;
import com.example.no1admin.pojo.vo.picture.PictureDetailVO;
import com.example.no1admin.pojo.vo.picture.PictureListItemVO;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Repository
@Transactional
public interface PictureMapper {
    /**
     * 插入图片数据
     * @param picture 图片数据
     * @return 受影响的行数，成功插入数据时，将返回1
     */

    int insert(Picture picture);

    /**
     * 根据图片id删除对应的图片数据
     * @param id 图片id
     * @return 受影响的行数，成功删除数据时，将返回1，如果id对应的数据不存在，则返回0
     */
    int deleteById(Long id);

    /**
     * 根据若干个图片id，批量删除图片数据
     * @param ids 期望删除的若干个图片数据的id
     * @return 受影响的行数，将返回成功删除的数据量
     */
    int deleteByIds(Long... ids);

    /**
     * 根据id修改图片数据
     * @param pictureEditDTO 图片数据
     * @return 受影响的行数，当修改成功时，将返回1，如果无此id对应的数据，将返回0
     */
    int updateById(PictureEditDTO pictureEditDTO);

    /**
     * 根据图片路径统计此路径对应的图片数据的数量
     * @param url 图片路径
     * @return 此图片路径对应的图片数据的数量
     */
    int countByUrl(String url);

    /**
     * 根据图片id查询图片详情
     * @param id 图片id
     * @return 此图片id对应的图片数据的数量
     */
    PictureDetailVO getById(Long id);

    /**
     *查询图片列表
     * @return 图片列表的集合
     */
    List<PictureListItemVO> list();


    /**
     * 根据图片name查询图片详情
     * @param name 图片name
     * @return 此图片name对应的图片数据的数量
     */
    PictureDetailVO getByName(String name);

    /**
     * 根据图片name删除图片
     * @param url 图片名字
     * @return 1表示删除成功
     */
    int deleteByName(String url);

    /**
     * 根据url修改图片数据
     * @param picture 图片数据
     * @return 1表示修改成功
     */
    int updateByUrl(Picture picture);

    /**
     * 根据相册id查询url
     * @param albumId 相册id
     * @return url
     */
    String getUrlByAlbumIdAndIsCover(Long albumId);

    /**
     *根据相册id查询图片列表
     * @return 图片列表的集合
     */
    List<PictureListItemVO> listByAlbumId(Long albumId);
}
